# 一、定义一个学生Student类。有下面的实例属性：
# 1 姓名 name
# 2 年龄 age
# 3 成绩 score（语文，数学，英语) [每课成绩的类型为整数]
# 类方法：
#  1 获取学生的姓名：get_name() 返回类型:str
# 2 获取学生的年龄：get_age() 返回类型:int
# 3 返回3门科目中最高的分数。get_course() 返回类型:int
# 4 将每个实例学生对象写进txt文件里，要持久保存
# 举例：{"姓名":"a","年龄":29,"成绩":{"语文":99,"数学":100,"英语":85}
# 5 获取所有学生的信息
# 写好类以后，可以定义2个同学测试下:
# zm = Student('zhangming',20,[69,88,100])
"""class Student:
    def __init__(self,name,age,score:list):
        self.name = name
        self.age = age
        self.score = {"语文":score[0],"数学":score[1],"英语":score[2]}
    def get_name(self):
        return self.name
    def get_age(self):
        return self.age
    def get_course(self):
        return max(self.score.values())
    def write_file(self):
        a = {"姓名":self.name,"年龄":self.age,"成绩":self.score}
        with open('student-7.txt','a',encoding='utf-8') as f:
            f.write(str(a)+'\n')
    def display(self):
        with open('student-7.txt','r',encoding='utf-8') as f:
            print(f.read())
s = Student('ding',15,[80,98,90])
print(s.name)
print(s.age)
print(s.score)
print(s.get_name())
print(s.get_age())
print(s.get_course())
s.write_file()
s.display()"""
# 二、定义一个字典类：dictclass。完成下面的功能：
# 1 删除某个key
# 2 判断某个键是否在字典里，如果在返回键对应的值，不存在则返回"not found"
# 3 返回键组成的列表：返回类型;(list)
# 4 合并字典，并且返回合并后字典的values组成的列表。返回类型:(list)\
import random
"""class Dictclass:
    def __init__(self,dict_d:dict):
        self.dict_d = dict_d    # 字典
        self.key = self.dict_d.keys()
        self.value = self.dict_d.values()
    def del_key(self,key):
        if key in self.key:
            self.dict_d.pop(key)
            print("删除成功")
        else :
            print("删除失败")
    def key_value(self,key1):
        if key1 in self.key:
            for key,value in self.dict_d.items():
                if key==key1:
                    return value
        else:
            return "not found"
    def get_key(self):
        return list(self.key)
    def union(self,dict_u):
        for key,value in dict_u.items():
            self.dict_d[key] = value
        return list(self.dict_d.values())
dic = Dictclass({"姓名":"丁莹","年龄":29,"成绩":85})
print(dic.dict_d)
dic.del_key("成绩")
print(dic.key_value("年龄"))
print(dic.get_key())
dic1 = {"性别":"女","学号":19008010,"计算机成绩":89}
print(dic.union(dic1))"""
# 三、定义一个列表的操作类：Listinfo
# 包括的方法:
# 1 列表元素添加: add_key(keyname) [keyname:字符串或者整数类型]
# 2 列表元素取值：get_key(num) [num:整数类型]
# 3 列表合并：update_list(list) [list:列表类型]
# 4 删除并且返回最后一个元素：del_key()
"""class Listinfo:
    def __init__(self,list_u:list):
        self.list_u = list_u
    def add_key(self,keyname:int or str):
        if type(keyname) in (int,str):
            self.list_u.append(keyname)
            print(self.list_u)
        else:
            print("类型错误")
    def get_key(self,num):
        if num<len(self.list_u)+1:
            return self.list_u[num-1]
        else:
            return "索引超出长度"
    def update_list(self,list1):
        return self.list_u+list1
    def del_key(self):
        return self.list_u.pop()
l = Listinfo([12,32,45,83,73,"asd",'lsit',"ying"])
l.add_key(222)
l.add_key("ding")
print(l.get_key(7))
print(l.update_list(['a',3,'e',765]))
print(l.del_key())"""
# 四、做一个学生点名系统，系统里支持：存入学生、更改学生、删除学生、点到学生姓名方法
# 存入学生（姓名、年龄、家庭地址、手机号）： 存入成功后，提示xxx存入成功
# 更改学生（姓名、年龄、家庭地址、手机号）：可以修改学生内容的任意一个字段
# 删除学生：删除的学生将不在展示
# 展示全部学生：可以看到全部的学生姓名
# 学生姓名：随机抽取任意一个存在的学生信息，然后打印：到！。举例： 刘闯到！
"""class Student:
    def __init__(self):
        self.dict_stu = {}
    def add_student(self):
        name = input("请输入学生姓名：")
        if name not in self.dict_stu:
            age = input("请输入学生年龄：")
            address = input("请输入学生家庭地址：")
            phone_number = input("请输入学生手机号：")
            self.dict_stu[name] = {"年龄":age,"地址":address,"手机号":phone_number}
            print("存入成功！！")
        else:
            print("该名学生已存在！！")
    def update_stu(self):
        use_in = input("请输入要修改的名字：")
        if use_in in self.dict_stu:
            user_i = input("请输入要修改的字段：")
            if user_i == "姓名":
                name_new = input("请输入新的名字：")
                self.dict_stu[name_new] = self.dict_stu.pop(use_in)
            else:
                new_in = input("请输入新的内容：")
                self.dict_stu[use_in][user_i]=new_in
        else:
            print("要修改的学生不存在！")
    def del_stu(self):
        stu_name = input("请输入要删除的学生姓名：")
        if stu_name in self.dict_stu:
            self.dict_stu.pop(stu_name)
        else:
            print("您删除的学生不存在")
    def show_dict(self):
        for i in self.dict_stu:
            print(f"姓名：{i},年龄：{self.dict_stu[i]['年龄']},地址：{self.dict_stu[i]['地址']},手机号：{self.dict_stu[i]['手机号']}")
    def sui_ji(self):
        r = random.randint(0,len(self.dict_stu)-1)
        n=0
        for i in self.dict_stu:
            if n ==r:
                return i+'到！'
            else:
                n+=1
user = Student()
while True:
    print("学生点名系统！"
          "1、存入学生信息\n"
          "2、更改学生信息\n"
          "3、删除学生信息\n"
          "4、展示全部学生信息\n"
          "5、随机点名\n"
          "6、退出系统")
    teacher_in = input("请选择功能：")
    if teacher_in =='1':
        user.add_student()
    elif teacher_in =='2':
        user.update_stu()
    elif teacher_in == '3':
        user.del_stu()
        user.show_dict()
    elif teacher_in == '4':
        user.show_dict()
    elif teacher_in == '5':
        print(user.sui_ji())
    elif teacher_in =='6':
        print("退出系统")
        break

"""
# 五、点餐管理系统
# 1》、餐馆可以新增菜品、下架菜品、修改菜品
# 2》、每个菜品，都有对应的库存，所有菜品的库存均为999，每出一道菜，库存-1
# 菜品有对应的价格，餐厅老板定义价格每道菜不允许超过15元，没有小数单位，均为整数
# 3》、餐馆后台有点赞系统，能够收集客户对菜品的喜好，0~5分
# 4》、有菜品评分提报功能，对平均分数（菜品总分/打分人数）低于3分的菜品进行强制下架；

# 六、定义一个桌子类（Desk），包含长（length）、宽（width）、高（height）属性，
# 包含一个打印桌子信息属性的方法（showInfo）。实例化2个桌子对象，为其赋予不同的属性值，
# 并调用showInfo方法，输出每个桌子的信息。
"""class Desk:
    def __init__(self,length,width,height):
        self.length = length
        self.width = width
        self.height = height
    def showInfo(self):
        print(f"桌子{self.name} 长：{self.length} 宽：{self.width} 高：{self.height}")
desk1 = Desk(12,12,12)
desk2 = Desk(22,22,22)
desk1.name = 'desk1'
desk1.showInfo()
desk2.name = 'desk2'
desk2.showInfo()"""
# 七、定义一个用户类(User),用户名(username)和密码(password)是这个类的属性。
"""class User:
    uername=''
    password=''
"""
# 八、定义一个计算器类，有加减乘除四个方法
"""class JiSuan:
    def __init__(self,num1,num2):
        self.num1 = num1
        self.num2 = num2
    def add(self):
        return self.num1+self.num2
    def sub(self):
        return self.num1-self.num2
    def mul(self):
        return self.num1*self.num2
    def div(self):
        return self.num1/self.num2
"""
# 九、创建一个名为Person的类，具有以下属性和方法：
# 属性：name（姓名），age（年龄）
# 方法：greet()，打印出一句问候语，包括该人的姓名和年龄
"""class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def greet(self):
        print(f"祝{self.age}岁的{self.name}天天开心，")
p = Person("丁莹",23)
p.greet()"""
# 十、定义一个图书管理系统类，图书可以新增、修改、删除，要求新增的每个图书都加到txt文本里，数据持久化
# 新增：图书名、作者名称、新建年月日
# 修改：图书名、作者名称、新建年月日
# 删除：图书删掉，且不在展示
# 查看：全量查询，精确查询，需要用户传入形参来控制返回结果
class Book:
    pass


# 十一、创建一个名为"Car"的类，该类具有"品牌"和"颜色"属性。
# 创建一个"start_engine"方法，该方法打印出"启动汽车引擎！"的消息。
# 创建一个"stop_engine"方法，该方法打印出"关闭汽车引擎！"的消息
"""class Car:
    def __init__(self,brand,colour):
        self.brand = brand
        self.colour = colour
    def start_engine(self):
        print("启动汽车引擎!")
    def stop_engine(self):
        print("关闭汽车引擎!")"""
# 十二、淘宝商家后台，可以上架商品、下架商品，功能如下：
#  （1） 可以添加商品，商家添加完的商品会存到商品列表
#  1.1  商品要有名称、sku、价格
#  （2） 可以修改商品信息：名称、sku、价格
#  （3） 可以对商品进行下架，下架后的商品不再展示
"""class Shopping:
    def __init__(self):
        self.dict_goods = {}
    def add_student(self):
        name = input("请输入商品名称：")
        if name not in self.dict_goods:
            sku = input("请输入商品sku：")
            price = input("请输入商品价格：")
            self.dict_goods[name] = {"sku":sku,"价格":price}
            print("存入成功！！")
        else:
            print("该商品已存在！！")
    def update_stu(self):
        use_in = input("请输入要修改的名称：")
        if use_in in self.dict_goods:
            user_i = input("请输入要修改的字段：")
            if user_i == "姓名":
                name_new = input("请输入新的名称：")
                self.dict_goods[name_new] = self.dict_goods.pop(use_in)
            else:
                new_in = input("请输入新的内容：")
                self.dict_goods[use_in][user_i]=new_in
        else:
            print("要修改的名称不存在！")
    def del_stu(self):
        stu_name = input("请输入要删除的商品名称：")
        if stu_name in self.dict_goods:
            self.dict_goods.pop(stu_name)
        else:
            print("您删除的商品不存在")
    def show_dict(self):
        for i in self.dict_goods:
            print(f"名称：{i},sku：{self.dict_goods[i]['sku']},价格：{self.dict_goods[i]['价格']}")
user = Shopping()
while True:
    print("淘宝商家后台！"
          "1、上架商品信息\n"
          "2、更改商品信息\n"
          "3、下架商品信息\n"
          "4、展示全部商品信息\n"
          "5、退出系统")
    userr_in = input("请选择功能：")
    if userr_in =='1':
        user.add_student()
    elif userr_in =='2':
        user.update_stu()
    elif userr_in == '3':
        user.del_stu()
        user.show_dict()
    elif userr_in == '4':
        user.show_dict()
    elif userr_in == '5':
        print("退出系统")
        break"""
# 十三、定义一个人类
# 1.小明和小美都爱跑步
# 2.小美体重45.0公斤
# 3.小明体重75.0公斤
# 4.每次跑步都会减少0.5公斤
# 5.每次吃东西都会增加1公斤
"""class Person:
    def __init__(self,weight):
        self.weight = weight
    def run(self):
        return self.weight-0.5
    def eat(self):
        return self.weight+1
xiaoming = Person(75)
xiaomei = Person(45)
"""
# 十四、士兵瑞恩有一把ak47
# 士兵可以开火（开火扣动的是扳机）
# 枪能够发射子弹（把子弹打出去）
# 抢能够装子弹–增加子弹数量
# 要求没子弹，需要输出没有子弹了，且发射失败
"""class Ak47:
    def __init__(self,num):
        self.num = num
    def kaihuo(self):
        if self.num==0:
            print("没有子弹了，且发射失败")
        else:
            self.num-=1
            print("开火")
    def add_zidan(self):
        self.num+=10
        print("装弹")
    
"""